package web;


import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.birrap.ejb.UsuariosTBeanLocal;
import org.birrap.entities.RolesT;
import org.birrap.entities.UsuariosT;
import util.FacesMessagesUtil;

@ManagedBean
@RequestScoped
/**
 * Clase en la que realizamos toda la logica referente sl signIn del usuario
 */
public class SignupManagedBean {
    
    private FacesContext context;
    
    @EJB
    private UsuariosTBeanLocal usuarioBean;
    
    private UsuariosT usuario;
    
    private String repassword;
    
    private String rol;
    
    public SignupManagedBean() {
        usuario = new UsuariosT();
        context = FacesContext.getCurrentInstance();
    }
    
    /**
     * Metodo en el que una vez pase la validacion, si se crea correctamente el usuario nos vamos a la 
     * pagina principal de la aplicacion y en caso de que ocurra algun problema redirigimos a una pagina
     * de error.
     * @return String
     */
    public String signUp() {        
        String res = "ERROR";
        context = FacesContext.getCurrentInstance();
        
        if(validate()) 
        {
            UsuariosT user = usuarioBean.insert(usuario);

            if(user == null) 
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, 
                                                          "El usuario no ha podido ser creado.", 
                                                          "El usuario no ha podido ser creado."));
                res = "ERROR";
            }
            else 
            {
                context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, 
                                                          "El usuario ha sido creado.", 
                                                          "El usuario ha sido creado."));
                res = "OK";
            }
        }
        return res;
    }
    
    /**
     * Metodo con el que comprobamos que todos los campos a la hora de hacer SignIn sean correctos
     * @return boolean
     */
    private boolean validate() {
        boolean validado = false;
        context = FacesContext.getCurrentInstance();
        
        if(usuario.getNombre() == null || usuario.getNombre().isEmpty()) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Se requiere un nombre.", 
                                                      "Se requiere un nombre."));
        }
        if(usuario.getApellidos() == null || usuario.getApellidos().isEmpty()) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Se requiere un apellido.", 
                                                      "Se requiere un apellido."));
        }
        if(usuario.getCorreo() == null  || usuario.getCorreo().isEmpty()) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Se requiere el correo.", 
                                                      "Se requiere el correo."));
        }
        if(usuarioBean.findByCorreo(usuario.getCorreo()) !=null){
            if(usuario.getCorreo().equals(usuarioBean.findByCorreo(usuario.getCorreo()).getCorreo())){
        
                {
                    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                              "El correo ya está en uso.", 
                                                              "El correo ya está en uso."));
                }
            }
        }
        if(usuarioBean.findByCorreo(usuario.getCorreo()) ==null){
            
        }
        
        if(usuario.getPassword() == null || usuario.getPassword().isEmpty()) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Se requiere una contraseña.", 
                                                      "Se requiere una contraseña."));
        }
        if(repassword == null || repassword.isEmpty()) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Se requiere reescribir la contraseña.", 
                                                      "Se requiere reescribir la contraseña."));
        }
        if(usuario.getPassword() == null || repassword == null ||
           !usuario.getPassword().equals(repassword)) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Las contraseñas no coinciden ", 
                                                      "Las contraseñas no coinciden."));
        }
        if(usuario.getIdRol() == null || usuario.getIdRol().getIdRol() == null) 
        {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                                                      "Ha de seleccionar un tipo de usuario obligatoriamente.", 
                                                      "Ha de seleccionar un tipo de usuario obligatoriamente."));
        }
        if(!FacesMessagesUtil.hasMessages(context))
        {
            validado = true;
        }
        return validado;
    }
    
    public UsuariosT getUsuario() {
        return usuario;
    }
    
    public String getRepassword() {
        return repassword;
    }
    
    public void setRepassword(String repassword) {
        this.repassword = repassword;
    }
    
    public void setRol(String rol){
        this.rol = rol;
        RolesT idRol = new RolesT();
        idRol.setIdRol(rol);
        usuario.setIdRol(idRol);
    }
    public String getRol(){
        return rol;
    }
}
